<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Digital Command Language</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Digital_Command_Language"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Digital_Command_Language rootpage-Digital_Command_Language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Digital Command Language</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p><b>DCL</b>, die <b>DIGITAL Command Language</b>, ist die Standard-Kommandosprache des <a href="Betriebssystem" title="Betriebssystem">Betriebssystems</a> <a href="OpenVMS" title="OpenVMS">OpenVMS</a>, welches ursprünglich von der Firma <a href="Digital_Equipment_Corporation" title="Digital Equipment Corporation">Digital Equipment Corporation</a> (kurz DEC) entwickelt wurde. Aktuell wird OpenVMS von VMS Software Inc. weiterentwickelt und vertrieben. Der erste Einsatz war unter dem Betriebssystem <a href="RSX-11" title="RSX-11">RSX-11</a>.
</p><p>Mit DCL lassen sich am Kommando-<a href="Eingabeaufforderung" class="mw-redirect" title="Eingabeaufforderung">Prompt</a> Aktionen ausführen, etwa zur Dateibe- und verarbeitung (ähnlich wie unter <a href="MS-DOS" title="MS-DOS">MS-DOS</a>) oder zur <a href="Systemadministrator" title="Systemadministrator">Systemadministration</a>, aber auch komplexe Kommandoprozeduren erstellen, die interaktiv oder im <a href="Stapelverarbeitung" title="Stapelverarbeitung">Batchbetrieb</a> laufen können (vgl. Shellskripte unter <a href="Unix" title="Unix">Unix</a>).
</p>
<div class="mw-heading mw-heading2"><h2 id="Eigenschaften_von_DCL">Eigenschaften von DCL</h2></div>
<p>DCL erlaubt die Erstellung von komplexen Kommandoprozeduren und ist somit durchaus für die <a href="Programmierung" title="Programmierung">Programmierung</a> geeignet, jedoch sind DCL als Kommandosprache auch Grenzen gesetzt. Im Vergleich zu konventionellen <a href="Programmiersprache" title="Programmiersprache">Programmiersprachen</a> weist DCL Vor- und Nachteile auf.
</p><p>Die folgenden Punkte zählen für DCL.
</p>
<ul><li>DCL ist auf jedem OpenVMS-System verfügbar.</li>
<li>DCL-Kommandoprozeduren können schnell entwickelt werden. Der Programmierer muss keine Editieren/Kompilieren/Linken-Zyklen durchlaufen, da DCL eine <a href="Interpreter" title="Interpreter">interpretierte</a> Sprache ist.</li>
<li>DCL-Prozeduren können bei Bedarf schnell angepasst, verändert oder erweitert werden.</li>
<li>DCL-Prozeduren können OpenVMS-Werkzeuge (englisch utilities) und andere Software-Produkte auf einfache Weise nutzen.</li>
<li>Einige komplexe Aspekte der Programmierung für OpenVMS werden durch DCL signifikant vereinfacht, wie z. B. die Behandlung von Fehlern und Interrupts (soweit die Verarbeitung verhältnismäßig unkompliziert bleibt).</li>
<li>Weniger erfahrene Programmierer können DCL-Prozeduren benutzen, um einzelne Blöcke einer umfassenderen Programmierung separat zu erstellen.</li></ul>
<p>Die folgenden Punkte zählen gegen DCL.
</p>
<ul><li>Eine DCL-Prozedur wird langsamer abgearbeitet als ein konventionelles, kompiliertes <a href="Computerprogramm" title="Computerprogramm">Programm</a>, da eine DCL-Kommandoprozedur durch einen <a href="Interpreter" title="Interpreter">Interpreter</a> ausgeführt wird. Dies kommt speziell zum Tragen, wenn die DCL-Prozedur sehr rechenintensive Kommandos (z. B. sehr viele arithmetische Operationen) durchführt. Es kommt weniger zum Tragen, wenn die Prozedur z. B. hauptsächlich Dateioperationen durchführt.</li>
<li>DCL fehlen einige wichtige arithmetische Funktionen, wie z. B. die Unterstützung von <a href="Gleitkommazahl" title="Gleitkommazahl">Gleitkommazahlen</a>.</li>
<li>Fähigkeiten und Möglichkeiten zur Strukturierung von Daten, die wichtig für viele Software-<a href="Algorithmus" title="Algorithmus">Algorithmen</a> sind, sind so gut wie nicht existent in DCL.</li>
<li>DCL lässt einige Konstrukte moderner Programmierung vermissen, wie etwa WHILE- oder FOR-Schleifen. Diese müssen in DCL manuell nachgebildet werden.</li>
<li>Nur einfache Benutzerschnittstellen können in DCL realisiert werden. DCL hat keine Unterstützung für Fenstertechniken oder andere graphische Darstellungen.</li>
<li>Ein Programm kann von einer DCL-Prozedur nur aufgerufen werden, wenn es eine Kommandoschnittstelle (englisch command interface) bereitstellt, d. h. Codebibliotheken können von DCL aus nicht direkt genutzt werden.</li>
<li>Die Flexibilität von DCL kann es als schwierig gestalten, eine Prozedur zu erstellen, die es einem weniger privilegierten Benutzer gestattet, ausgewählte Funktionen zu benutzen, zu denen der Benutzer nicht direkt autorisiert ist (englisch captive command procedures). Zum Beispiel akzeptiert das INQUIRE-Kommando nicht nur Eingaben, sondern kann auch zur Ausführung von lexikalischen Funktionen (englisch lexical functions) benutzt werden.</li></ul>
<p>Als DCL in den 1970ern konzipiert wurde, konnte die weitere Entwicklung und Nutzung für die Erstellung komplexer Aufgaben nicht unbedingt vorhergesehen werden, so dass DCL in einigen Punkten nicht so strukturiert wie andere modernere Programmiersprachen erscheinen mag.
</p>
<div class="mw-heading mw-heading2"><h2 id="Spezialitäten_von_DCL"><span id="Spezialit.C3.A4ten_von_DCL"></span>Spezialitäten von DCL</h2></div>
<p>DCL weist einige Besonderheiten im Vergleich zu anderen Kommandosprachen auf.
</p>
<div class="mw-heading mw-heading3"><h3 id="Foreign_Commands">Foreign Commands</h3></div>
<p>In DCL ist es möglich (und üblich), sogenannte Fremdkommandos (englisch foreign commands) zu definieren. Über diesen Mechanismus können Benutzer, z. B. in ihrer Loginprozedur, eigene Kommandos oder abgewandelte Standardkommandos definieren.
</p>
<pre>$ foo :== $sys$sysexe:foo.exe
</pre>
<p>Nach dieser Definition wird das neue Kommando <code>FOO</code> das Programm namens FOO.EXE aufrufen. Hierbei können optional auch Parameter an das Programm mit übergeben werden.
</p>
<pre>$ ST == "SHOW TIME"
</pre>
<p>Hier wird das neue Kommando <code>ST</code> definiert, welches anschließend eine Kurzfassung des Kommandos zum Anzeigen der Zeit ist.
</p>
<pre>$ del*ete:==delete /confirm/log
</pre>
<p>Hier wird das Standardkommando <code>DELETE</code> als <i>foreign command</i> so erweitert, dass standardmäßig die Optionen zum Nachfragen und Protokollieren mit angegeben sind. Der Stern bei der Definition regelt, ab welcher Position das Kommando auch in abgekürzter Form benutzt werden darf.
</p>
<div class="mw-heading mw-heading3"><h3 id="Logical_Names">Logical Names</h3></div>
<p>Ein logischer Name (englisch logical name) ist eine benannte <a href="Entit%C3%A4t_(Informatik)" title="Entität (Informatik)">Entität</a>, die kreiert und der ein Wert zugewiesen werden kann. Dieser Name (oder auch kurz <i>Logical</i> genannt) steht dann anschließend für diesen Wert in einem Kontext wie etwa einer Dateispezifikation. Innerhalb dieses Kontexts ersetzt OpenVMS automatisch den logischen Namen durch seinen Wert. Ein logischer Name ähnelt einem Symbol, allerdings unterscheiden sich die beiden Konzepte in wichtigen Punkten. Logische Namen werden in entsprechenden Tabellen (englisch logical name tables) gespeichert. Diese Tabellen können auf verschiedenen Ebenen verfügbar gemacht werden: einem einzelnen Prozess, einer Familie von Prozessen oder allen Prozessen im System. Daher können logische Namen – im Gegensatz zu Symbolen – von mehreren Prozessen (d. h. prozessübergreifend) genutzt werden. In einem VMS-Cluster können logische Namen sogar über Rechnergrenzen hinweg existieren.
</p>
<div class="mw-heading mw-heading2"><h2 id="Erstellen_von_Kommandoprozeduren">Erstellen von Kommandoprozeduren</h2></div>
<p>Das Erstellen von Kommandoprozeduren in DCL erfolgt mittels eines Texteditors, der direkt vom DCL-Prompt aus aufgerufen werden kann.
</p><p>Die Dateiextension für eine DCL-Datei lautet <code>.com</code> – diese Extension unter OpenVMS ist nicht zu verwechseln mit der gleichlautenden Extension unter DOS/Windows, die eine andere Bedeutung hat.
</p>
<div class="mw-heading mw-heading3"><h3 id="LOGIN.COM">LOGIN.COM</h3></div>
<p>Üblicherweise wird eine spezielle Prozedur nach dem <a href="Login_(Informationstechnik)" title="Login (Informationstechnik)">Login</a> eines Benutzer automatisch ausgeführt. Diese Prozedur trägt in der Regel den Namen LOGIN.COM – dies kann pro Benutzer vom Systemadministrator (ggf. auch mit abweichendem Namen) festgelegt werden. In dieser DCL-Prozedur können entweder vom Benutzer selbst oder vom Systemadministrator wichtige Eigenschaften und Kommandos definiert werden, die für die Sitzung des Benutzers wichtig sind.
</p>
<div class="mw-heading mw-heading3"><h3 id="Zeilenkennung">Zeilenkennung</h3></div>
<p>Skripte (bzw. Kommandoprozeduren) in DCL ähneln Skripten in anderen Sprachen, jedoch mit einigen Ausnahmen. Alle DCL-Kommandos in einer Kommandoprozedur müssen mit einem $-Zeichen beginnen. Andere Zeilen werden als Eingabe für ein Kommando gewertet (Selbst Zeilen, die mit THEN oder ELSE beginnen, erfordern das $-Zeichen).
</p><p>Das folgende Beispiel demonstriert die Verwendung des TYPE-Kommandos, um einen Abschnitt auf dem Bildschirm darzustellen.
</p>
<pre>$ TYPE SYS$INPUT:
Dies ist ein Beispiel für das
TYPE-Kommando in DCL.
$ EXIT
</pre>
<div class="mw-heading mw-heading3"><h3 id="Indirekte_Referenzierung_von_Variablen">Indirekte Referenzierung von Variablen</h3></div>
<p>Es ist durchaus möglich, in DCL Arrays nachzubilden. Die einzelnen Elemente eines Arrays werden durch übersetzte Symbole referenziert. Diese Technik erlaubt es dem Programmierer, Datenstrukturen in dynamischer Größe zu erstellen, die ggf. die Daten selbst als Index benutzen.
</p>
<pre>$ i = 1
$ variable'i' = "blau"
$ i = 2
$ variable'i' = "gruen"
$ j = 1
$ farbe = variable'j'
$ regenbogen'farbe' = "rot"
$ farbe = variable'i'
$ regenbogen'farbe' = "gelb"
</pre>
<p>In diesem Beispiel ist der Variablen <code>regenbogenblau</code> der Wert "rot" zugewiesen, der Variablen <code>regenbogengruen</code> der Wert "gelb".
</p>
<div class="mw-heading mw-heading3"><h3 id="Lexikalische_Funktionen">Lexikalische Funktionen</h3></div>
<p>Mittels lexikalischer Funktionen (englisch lexical functions) ist es DCL möglich, Systeminformationen zu erhalten (etwa über den eigenen Prozess oder über ein Device (dt. Gerät)) und erweiterte Stringmanipulationen durchführen. Alle lexikalischen Funktionen beginnen mit <code>f$</code>.
</p>
<pre>$ write sys$output f$user()
</pre>
<p>Dieses Beispiel wird über die lexikalische Funktion <code>f$user()</code> den Namen des aktuell angemeldeten Benutzers an der Konsole ausgeben.
</p>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Paul C. Anagnostopoulos, Steve Hoffman: <i>Writing Real Programs in DCL</i>, Second Edition, 1998, Digital Press. ISBN 1-55558-191-9</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://h71000.www7.hp.com/doc/732FINAL/9996/9996PRO.HTML">HP OpenVMS DCL Dictionary</a> ← Link fehlerhaft</li>
<li><a rel="nofollow" class="external text" href="http://h30266.www3.hpe.com/odl/axpos/opsys/vmsos84/9996/9996pro_243.html">HP OpenVMS DCL Dictionary</a> → Ersatzlink</li>
<li><a rel="nofollow" class="external text" href="http://dcl.openvms.org/">OpenVMS.org's DCL archive</a> ← Link fehlerhaft</li>
<li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20140627121404/http://dcl.openvms.org/">OpenVMS.org's DCL archive</a> → Ersatzlink</li></ul>
<ul><li><a rel="nofollow" class="external text" href="http://www.dcldialogue.com">Archive of DEC Professional/Digital Age magazine's DCL columns</a></li>
<li><a rel="nofollow" class="external text" href="http://h71000.www7.hp.com/openvms/products/ips/xml/">XML-based new orientation for DCL and OpenVMS interface</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-09-29" href="https://de.wikipedia.org/wiki/?title=Digital_Command_Language&oldid=260161174">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>